#pragma once

#include "data_manager.h"
#include <cmath> // 引入数学函数

/**
 * @brief 掌握程度评估类
 * 负责计算 MasteryScore、推算CF Rating和学习计划。
 */
class MasteryEvaluator {
private:
    DataManager& dm;

    // 核心评分权重 (W1+W2+W3+W4 = 1.0)
    const float W1 = 0.45f; // 独立解决度
    const float W2 = 0.25f; // 用时惩罚
    const float W3 = 0.30f; // 尝试次数惩罚
    const float W4 = 0.00f; // 反思质量（已移除）

    // 辅助函数：Sigmoid公式计算预期解决概率
    float expectedProbability(int problemRating, int userRating);

    // 辅助函数：通过二分查找找到最优的Rating
    int findOptimalRating(const std::vector<std::pair<int, float>>& samples);

public:
    MasteryEvaluator(DataManager& manager)
        : dm(manager)
    {
    }

    // 1. 计算单题掌握度 (MasteryScore)
    void calculateProblemMastery(Problem& p);

    // 2. 推算整体等效CF Rating
    void calculateOverallRating();

    // 3. 推算每个算法专题的专项CF Rating
    void calculateTopicRatings();

    // 4. 生成学习计划 (待实现)
    void generateStudyPlan();
};
